package org.example.servicepay.vo;

import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 学生缴费清单响应
 */
@Data
public class StudentFeeListResponse {

    /**
     * 学生ID
     */
    private String studentId;

    /**
     * 待缴费项目列表
     */
    private List<UnpaidFeeItem> unpaidFees;

    /**
     * 已缴费项目列表
     */
    private List<PaidFeeItem> paidFees;

    /**
     * 待缴费总金额
     */
    private BigDecimal totalUnpaidAmount;

    /**
     * 已缴费总金额
     */
    private BigDecimal totalPaidAmount;

    /**
     * 待缴费项目数量
     */
    private Integer unpaidCount;

    /**
     * 已缴费项目数量
     */
    private Integer paidCount;

    /**
     * 未缴费项目详情
     */
    @Data
    public static class UnpaidFeeItem {
        /**
         * 缴费记录ID
         */
        private Long recordId;

        /**
         * 缴费项目ID
         */
        private Long feeItemId;

        /**
         * 缴费项目名称
         */
        private String feeName;

        /**
         * 缴费金额（元）
         */
        private BigDecimal feeAmount;

        /**
         * 缴费项目描述
         */
        private String feeDescription;

        /**
         * 缴费截止时间
         */
        private LocalDateTime endTime;

        /**
         * 是否即将到期（3天内到期）
         */
        private Boolean isExpiringSoon;

        /**
         * 是否可以缴费（在有效时间范围内）
         */
        private Boolean canPay;
    }

    /**
     * 已缴费项目详情
     */
    @Data
    public static class PaidFeeItem {
        /**
         * 缴费记录ID
         */
        private Long recordId;

        /**
         * 缴费项目ID
         */
        private Long feeItemId;

        /**
         * 缴费项目名称
         */
        private String feeName;

        /**
         * 应缴金额（元）
         */
        private BigDecimal feeAmount;

        /**
         * 实际缴费金额（元）
         */
        private BigDecimal payAmount;

        /**
         * 缴费时间
         */
        private LocalDateTime payTime;

        /**
         * 支付订单号
         */
        private String outTradeNo;
    }
}